home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor1 / circuit.src < prev    next >
Text File  |  1990-10-17  |  4KB  |  142 lines

  1. %%HP: T(3)A(D)F(.);
  2. @ by Tony Duell
  3. DIR
  4.   DEMO { { "CLK" 5 5 M }
  5.          { "CLK" 10 10 N }
  6.          { "CLK" 20 20 P }
  7.          { "FADD" M N P S C } }
  8.   FADD { { A B CIN SUM COUT }
  9.          { { "HADD" A B S1 C1 } { "HADD" CIN S1 SUM C2 } { "OR" C1 C2 COUT } } }
  10.   HADD { { A B SUM CARRY } { { "XOR" A B SUM } { "AND" A B CARRY } } }
  11.   SIM
  12.     \<< INIT TITLE 1 SWAP
  13.       FOR j NXTSTATE 1 OUT.L SIZE
  14.         FOR i OUT.L i GET NAME.L SWAP POS STATE SWAP GET -4 * 6 + i 1 - 8 *
  15.           + R\->B j 29 + R\->B SWAP 2 \->LIST PIXON
  16.         NEXT
  17.       NEXT 7 FREEZE 0 WAIT DROP TEXT
  18.     \>>
  19.   ALL
  20.     \<< NAME.L NODES
  21.     \>>
  22.   NODES
  23.     \<< 'OUT.L' STO
  24.     \>>
  25.   COMPILE
  26.     \<< NEWC RCL DUP SIZE \-> cir siz
  27.       \<< 1 siz
  28.         FOR i cir i GET COMGATE
  29.         NEXT
  30.       \>>
  31.     \>>
  32.   MUX4 { { A B C D SA SB Y }
  33.          { { "MUX" SA A B YA } { "MUX" SA C D YB } { "MUX" SB YA YB Y } } }
  34.   MUX { { SEL A B Y }
  35.         { { "NOT" SEL NS }
  36.           { "AND" A NS YA }
  37.           { "AND" B SEL YB }
  38.           { "OR" YA YB Y } } }
  39.   MACCNT 3
  40.   TITLE
  41.     \<< ERASE { # 1Eh # 0h } { # 1Eh # 3Fh } LINE OUT.L SIZE 8 MIN 1 SWAP
  42.       FOR i OUT.L i GET \->STR DUP SIZE 1 - 2 SWAP SUB DUP SIZE 5 MIN 1 SWAP
  43.         SUB 2 \->GROB i 1 - 8 * R\->B # 0h SWAP 2 \->LIST SWAP PICT 3
  44.         ROLLD GOR
  45.       NEXT { # 0h # 0h } PVIEW
  46.     \>>
  47.   PPAR { (-6.5,-3.1) (6.5,3.2) X 0 (0,0) FUNCTION Y }
  48.   OUT.L { M N P S C }
  49.   NXTSTATE
  50.     \<< 1 CIRCUIT.L SIZE
  51.       FOR i CIRCUIT.L i GET DUP 1 GET "D" SWAP + OBJ\->
  52.       NEXT 'STATE.CNT' INCR DROP STATE.NEW 'STATE' STO
  53.     \>>
  54.   TMP { { "CLK" 5 5 R } { "CLK" 10 10 Q } { "CLK" 20 20 P } { "MUX" P Q R S } }
  55.   STATE { 1 1 0 0 1 0 0 1 }
  56.   DCLK
  57.     \<< DUP DUP 2 GET SWAP 3 GET \-> n m
  58.       \<< STATE.CNT n m + MOD n \>= SWAP 4 GET SWAP STATE.NEW 3 ROLLD PUT
  59.         'STATE.NEW' STO
  60.       \>>
  61.     \>>
  62.   DLO
  63.     \<< 2 GET 'STATE.NEW' SWAP 0 PUT
  64.     \>>
  65.   DHI
  66.     \<< 2 GET 'STATE.NEW' SWAP 1 PUT
  67.     \>>
  68.   DXOR
  69.     \<< DUP 2 GET STATE SWAP GET OVER 3 GET STATE SWAP GET XOR SWAP 4 GET
  70.       STATE.NEW 3 ROLLD SWAP PUT 'STATE.NEW' STO
  71.     \>>
  72.   DOR
  73.     \<< DUP 2 GET STATE SWAP GET OVER 3 GET STATE SWAP GET OR SWAP 4 GET
  74.       STATE.NEW 3 ROLLD SWAP PUT 'STATE.NEW' STO
  75.     \>>
  76.   DAND
  77.     \<< DUP 2 GET STATE SWAP GET OVER 3 GET STATE SWAP GET AND SWAP 4 GET
  78.       STATE.NEW 3 ROLLD SWAP PUT 'STATE.NEW' STO
  79.     \>>
  80.   DNOT
  81.     \<< DUP 2 GET STATE SWAP GET NOT SWAP 3 GET STATE.NEW 3 ROLLD SWAP PUT
  82.       'STATE.NEW' STO
  83.     \>>
  84.   DBUF
  85.     \<< DUP 2 GET STATE SWAP GET SWAP 3 GET STATE.NEW 3 ROLLD SWAP PUT
  86.       'STATE.NEW' STO
  87.     \>>
  88.   STATE.CNT 100
  89.   STATE.NEW { 1 1 0 0 1 0 0 1 }
  90.   INIT
  91.     \<< NAME.L SIZE CLIST DUP 'STATE' STO 'STATE.NEW' STO 0 'STATE.CNT' STO
  92.     \>>
  93.   COMGATE
  94.     \<< DUP SIZE OVER 1 GET PRIM OVER POS
  95.       IF 0 ==
  96.       THEN MACRO
  97.       ELSE 1 \->LIST SWAP 2 SWAP
  98.         FOR i OVER i GET DUP TYPE
  99.           IF 6 ==
  100.           THEN ADDNAME
  101.           END 1 \->LIST +
  102.         NEXT SWAP DROP 1 \->LIST CIRCUIT.L SWAP + 'CIRCUIT.L' STO
  103.       END
  104.     \>>
  105.   ADDNAME
  106.     \<< NAME.L OVER POS DUP
  107.       IF 0 ==
  108.       THEN DROP NAME.L SWAP + DUP 'NAME.L' STO SIZE
  109.       ELSE SWAP DROP
  110.       END
  111.     \>>
  112.   NEWC
  113.     \<< { } DUP 'CIRCUIT.L' STO 'NAME.L' STO 0 'MACCNT' STO
  114.     \>>
  115.   CIRCUIT.L { { "CLK" 5 5 1 } { "CLK" 10 10 2 } { "CLK" 20 20 3 }
  116.     { "XOR" 1 2 4 } { "AND" 1 2 5 } { "XOR" 3 4 6 } { "AND" 3 4 7 }
  117.     { "OR" 5 7 8 } }
  118.   NAME.L { M N P S1.1 C1.1 S C2.1 C }
  119.   MACRO
  120.     \<< DROP DROP OBJ\-> 1 - \->LIST 'MACCNT' INCR \-> arglist locmac
  121.       \<< OBJ\-> OBJ\-> DROP \-> extrn circ
  122.         \<< 1 circ SIZE
  123.           FOR i circ i GET 2 OVER SIZE
  124.             FOR j DUP j GET DUP TYPE
  125.               IF 6 ==
  126.               THEN extrn OVER POS IF 0 == THEN \->STR 1 OVER SIZE 1 - SUB "." +
  127.                 locmac \->STR + "'" + OBJ\-> j SWAP PUT ELSE extrn SWAP POS
  128.                 arglist SWAP GET j SWAP PUT END
  129.               END
  130.             NEXT COMGATE
  131.           NEXT
  132.         \>>
  133.       \>>
  134.     \>>
  135.   PRIM { "AND" "OR" "XOR" "NOT" "BUF" "HI" "LO" "CLK" }
  136.   CLIST
  137.     \<< { } SWAP 1 SWAP
  138.       START { 0 } +
  139.       NEXT
  140.     \>>
  141. END
  142.